package methodTest

import (
	"fmt"
	"math"
	"time"
)

//1.打印出九九乘法表并统计耗时

func Test01() {
	start := time.Now()
	var i, j int
	for i = 1; i <= 9; i++ {
		for j = 1; j <= i; j++ {
			fmt.Printf("%d*%d=%d\t", i, j, i*j)
		}
		fmt.Println()
	}
	tc := time.Since(start)
	fmt.Printf("耗时是%v", tc)
}

/*
	最小公倍数：最大两个或多个 整数公有的倍数叫做它们的公倍数，其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。
整数 a， b的最小公倍数记为[a，b]，同样的，a，b，c的最小公倍数记为[a，b，c]，多个 整数的最小公倍数也有同样的记号。
	最大公因数(公约数)：也称最大 公约数 、最大公 因子 ，指两个或多个 整数 共有 约数 中最大的一个。 a ， b 的最大公约数记为（a，b），
同样的，a，b，c的最大 公约 数记为（a，b，c），多个 整数 的最大公约数也有同样的记号。求最大公约数有多种 方法 ，常见的有
质因数分解 法、 短除法 、 辗转相除法 、 更相减损法 。
*/
func Test02(a, b int) {
	//min 获取两个数中的较小值(因为最大公约数bigNum不能比俩数中小的那个大）
	//max 获取两个数中的较大值（因为最小公倍数smallNum至少要比俩数中较大的那个大或等于，但小于m*n）
	var bigNum, smallNum int
	var max, min int
	if a < b {
		min = a
		max = b
	} else {
		min = b
		max = a
	}

	for i := min; i >= 0; i-- {
		if a%i == 0 && b%i == 0 {
			//最大公约数
			bigNum = i
			break
		}
	}

	for i := max; i <= a*b; i++ {
		if i%a == 0 && i%b == 0 {
			smallNum = i
			break
		}
	}
	fmt.Printf("最大公约数=%d,最小公倍数=%d\n", bigNum, smallNum)
}

//回文数
func Test03() {
	a := "1002332001"
	//定义俩变量 双向循环比较
	var left, right int
	var b bool
	for left, right = 0, len(a)-1; left <= len(a)/2-1; {
		if a[left] != a[right] {
			b = false
		}
		b = true
		left++
		right--
	}
	if b {
		fmt.Println("是回文数")
	} else {
		fmt.Println("不是回文数")

	}
}

//4.求水仙花数
//水仙花数是指一个 3 位数，它的每个位上的数字的 3次幂之和等于它本身（例如：1^3 + 5^3+ 3^3 = 153）

func Test04() {
	for i := 100; i < 1000; i++ {
		a := i / 100
		b := i / 10 % 10
		c := i % 10
		res := (a * a * a) + (b * b * b) + (c * c * c)
		if i == res {
			fmt.Println("水仙花数=", res)
		}
	}

}

//5.求质数
func isPrime(i int) bool {
	for j := 2; float64(j) <= math.Sqrt(float64(i)); j++ {
		if i%j == 0 {
			return false

		}
	}
	return true
}
func Test05() {
	var str []int //存放质数
	for i := 2; i < 100; i++ {
		if isPrime(i) {
			str = append(str, i)
		}
	}
	fmt.Println(str)
}
